#pragma once

#include <unordered_map>
#include "RenderHandle.h"

namespace SL
{
struct IDevice
{};

/**
 * @brief
 * 1. abstract logical device
 *
 * 2. provide interface to GPU queues
 *
 * 3. command list submission
 *
 * 4. Owner of GPU resource & life time tracking
 *
 * 5. mapping render handles -> device resource
 */
class RenderDevice : public IDevice
{
public:
    virtual void createQueue();
    virtual void submit(CommandList* cmd, int count);
    unordered_map<RenderHandle, IResource> resources;
};


} // namespace SL